package modelo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

public class Equipo {

	private String codigo;
	private String nombre;
	private String anno_fund;
	private String ciudad;
	private String estadio;
	private int juegos_j;
	private int juegos_g;
	private int juegos_p;
	private ArrayList<Jugador> jugadores;
	private HashMap<String,Integer> juegoshc = new HashMap<String,Integer>(), juegosvs = new HashMap<String,Integer>();
	
	public Equipo() {
		jugadores = new ArrayList<Jugador>();
		juegoshc = new HashMap<String,Integer>();
		juegosvs = new HashMap<String,Integer>();
		this.juegos_j = 0;
		this.juegos_g = 0;
		this.juegos_p = 0;
	}

	public Equipo(String codigo, String nombre, String anno_fund,
			String ciudad, String estadio) {
		this.codigo = codigo;
		this.nombre = nombre;
		this.anno_fund = anno_fund;
		this.ciudad = ciudad;
		this.estadio = estadio;
		this.juegos_j = 0;
		this.juegos_g = 0;
		this.juegos_p = 0;
		this.juegoshc = new HashMap<String,Integer>();
		this.juegosvs = new HashMap<String,Integer>();
		
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getAnno_fund() {
		return anno_fund;
	}

	public void setAnno_fund(String anno_fund) {
		this.anno_fund = anno_fund;
	}

	public String getCiudad() {
		return ciudad;
	}

	public void setCiudad(String ciudad) {
		this.ciudad = ciudad;
	}

	public String getEstadio() {
		return estadio;
	}

	public void setEstadio(String estadio) {
		this.estadio = estadio;
	}

	public int getJuegos_j() {
		return juegos_j;
	}

	public void setJuegos_j(int juegos_j) {
		this.juegos_j = juegos_j;
	}

	public int getJuegos_g() {
		return juegos_g;
	}

	public void setJuegos_g(int juegos_g) {
		this.juegos_g = juegos_g;
	}

	public int getJuegos_p() {
		return juegos_p;
	}

	public void setJuegos_p(int juegos_p) {
		this.juegos_p = juegos_p;
	}

	public ArrayList<Jugador> getJugadores() {
		return jugadores;
	}

	public void setJugadores(ArrayList<Jugador> jugadores) {
		this.jugadores = jugadores;
	}
	
	/*
	 * Método que comprueba si el jugador que se está pasando por parámetro
	 * ya existe en el equipo.
	 * Retorna TRUE si el jugador ya está en el equipo
	 * y FALSE en caso contrario
	 */
	public boolean ComprobarJugador(Jugador j) {
		if(this.jugadores.contains(j))
			return true;
		else
			return false;
	}
	
	/*
	 * Metodo que recibe de la liga un ArrayList<String> con los nombres
	 * de todos los equipos. Este metodo se encarga de eliminar su nombre
	 * del Array que recibe como parámetro y luego inicializa los
	 * Maps en cero (0), usando como llave el nombre de cada equipo.
	 */
	public void InicializarContadores(ArrayList<String> nom) {
		ArrayList<String> n = (ArrayList<String>)nom;
		n.remove(this.nombre);
		Iterator<String> it = n.iterator();
		while(it.hasNext()) {
			String k = it.next();
			this.juegoshc.put(k, 0);
			this.juegosvs.put(k, 0);
		}
	}
	
	/*
	 * Retorna la cantidad de juegos totales que el equipo ha jugado
	 * cotra el equipo que se recibe como parámetro
	 */
	public int getJuegosTotalesvsEquipo(String equipo) {
		if(this.nombre.equalsIgnoreCase(equipo))
			return 10;
		else
			return (this.getJuegosHomeClubEquipo(equipo) + this.getJuegosVisitanteEquipo(equipo));
	}
	/*
	 * Retorna la cantidad de juegos que el equipo ha jugado como
	 * visitante contra el equipo que se recibe como parámetro
	 */
	public int getJuegosVisitanteEquipo(String equipo) {
		return juegosvs.get(equipo).intValue();
	}
	
	/*
	 * Retorna la cantidad de juegos que el equipo ha jugado como
	 * HomeClub contra el equipo que se recibe como parámetro
	 */
	public int getJuegosHomeClubEquipo(String equipo) {
		return juegoshc.get(equipo).intValue();
	}
	
	/*
	 * Incrementa la cantidad de juegos que el equipo ha jugado como
	 * Visitante contra el equipo que se recibe como parámetro
	 */
	public void IncrementarJuegosVsEquipo(String equipo) {
		Integer v = Integer.valueOf(this.juegosvs.get(equipo).intValue());
		v += 1;
		this.juegosvs.put(equipo, v);
	}
	
	/*
	 * Incrementa la cantidad de juegos que el equipo ha jugado como
	 * Home Club contra el equipo que se recibe como parametro
	 */
	public void IncrementarJuegosHCEquipo(String equipo) {
		Integer v = Integer.valueOf(this.juegoshc.get(equipo).intValue());
		v += 1;
		this.juegoshc.put(equipo, v);
	}
	
	//Retorna la cantidad de jugadores presentes en el equipo
	public int getCantidadJugadores() {
		return this.jugadores.size();
	}
	
	/*
	 * Retorna un jugador aleatorio usando la funcion Math.random();
	 */
	public Jugador getJugadorAleatorio() {
		int indice = (int)Math.floor(Math.random()*this.getCantidadJugadores());
		return this.jugadores.get(indice);
	}
	
	public void IncrementarJuegosGanados() {
		this.juegos_g += 1;
		this.juegos_j += 1;
	}
	
	public void IncrementarJuegosPerdidos() {
		this.juegos_p += 1;
		this.juegos_j += 1;
	}
	
	public float getAverage() {
		if (this.juegos_j == 0)
			return 0;
		else
			return (this.juegos_g/this.juegos_j);
	}
}